"""
 @author adun
 @date 2020/11/1 21:33
 创建子类
要创建从其他类继承功能的类，请在创建子类时将父类作为参数发送：

实例
创建一个名为 Student 的类，它将从 Person 类继承属性和方法：
"""
from com.adun.oop.extends.Person import Person


class Student(Person):
    # 注释：如果您不想向该类添加任何其他属性或方法，请使用 pass 关键字。
    #
    # 现在，Student 类拥有与 Person 类相同的属性和方法。
    # pass

    # 添加 __init__() 函数
    # 到目前为止，我们已经创建了一个子类，它继承了父类的属性和方法。
    #
    # 我们想要把 __init__() 函数添加到子类（而不是 pass 关键字）。
    #
    # 注释：每次使用类创建新对象时，都会自动调用 __init__() 函数。
    # 当您添加 __init__() 函数时，子类将不再继承父的 __init__() 函数。
    #
    # 注释：子的 __init__() 函数会覆盖对父的 __init__() 函数的继承。
    #
    # 如需保持父的 __init__() 函数的继承，请添加对父的 __init__() 函数的调用【与Java有参构造器的使用一致】

    # def __init__(self,fname,lname):
    #     Person.__init__(self,fname,lname)

    # 使用 super() 函数
    # Python 还有一个 super() 函数，它会使子类从其父继承所有方法和属性：
    # def __init__(self, fname, lname):
    #     # 通过使用 super() 函数，您不必使用父元素的名称，它将自动从其父元素继承方法和属性。
    #     super().__init__(fname, lname)
    #     self.graduationyear = 2019

    # python的构造器只能有一个，有别于Java【但python中的变量是无类型du的，因此传给__init__的参zhi数可以是任何类型】
    def __init__(self, fname, lname, year):
        # 通过使用 super() 函数，您不必使用父元素的名称，它将自动从其父元素继承方法和属性。
        super().__init__(fname, lname)
        self.graduationyear = year

    def welcome(self):
        print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)
        print("Welcome {} , {} to the class of {}".format(self.firstname, self.lastname, self.graduationyear))


# x = Student("Elon", "Musk")
# x.printname()
# print(x.graduationyear)

x = Student("Elon", "Musk", 2019)
print(x.graduationyear)
x.welcome()
